-
Notifications
You must be signed in to change notification settings - Fork 12.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Allow obtaining &mut OsStr #70048
Allow obtaining &mut OsStr #70048
Conversation
Thanks for the pull request, and welcome! The Rust team is excited to review your changes, and you should hear from @Mark-Simulacrum (or someone else) soon. If any changes to this PR are deemed necessary, please add them as extra commits. This ensures that the reviewer can see what has changed since they last reviewed the code. Due to the way GitHub handles out-of-date commits, this should also make it reasonably obvious what issues have or haven't been addressed. Large or tricky changes may require several passes of review and changes. Please see the contribution instructions for more information. |
@rust-lang/libs: This PR adds stable impls for: impl DerefMut for OsString {...} // type Target = OsStr
impl IndexMut<RangeFull> for OsString {...} // type Output = OsStr The behavior matches the existing @rfcbot fcp merge |
Team member @dtolnay has proposed to merge this. The next step is review by the rest of the tagged team members: No concerns currently listed. Once a majority of reviewers approve (and at most 2 approvals are outstanding), this will enter its final comment period. If you spot a major issue that hasn't been raised at any point in this process, please speak up! See this document for info about what commands tagged team members can give me. |
🔔 This is now entering its final comment period, as per the review above. 🔔 |
The final comment period, with a disposition to merge, as per the review above, is now complete. As the automated representative of the governance process, I would like to thank the author for their work and everyone else who contributed. The RFC will be merged soon. |
@bors r+ |
📌 Commit 45416cd has been approved by |
Rollup of 5 pull requests Successful merges: - rust-lang#69644 (Remove framework in `dataflow/mod.rs` in favor of "generic" one) - rust-lang#69936 (Fix cycle error when emitting suggestion for mismatched `fn` type) - rust-lang#70048 (Allow obtaining &mut OsStr) - rust-lang#70344 (Decouple `rustc_hir::print` into `rustc_hir_pretty`) - rust-lang#70435 (Add regression test for rust-lang#66706) Failed merges: r? @ghost
Pkgsrc changes: * Remove a couple diffs which are now integrated upstream. * Adjust cargo checksums after upstream upgrades. * Belatedly bump the curl dependency * Unset DESTDIR during the build phase, to work around a mysterious build bug deep in the bowels of llvm. * Bump nearly all bootstraps to 1.43.1. Upstream changes: Version 1.44.0 (2020-06-04) ========================== Language -------- - [You can now use `async/.await` with `#[no_std]` enabled.][69033] - [Added the `unused_braces` lint.][70081] **Syntax-only changes** - [Expansion-driven outline module parsing][69838] ```rust #[cfg(FALSE)] mod foo { mod bar { mod baz; // `foo/bar/baz.rs` doesn't exist, but no error! } } ``` These are still rejected semantically, so you will likely receive an error but these changes can be seen and parsed by macros and conditional compilation. Compiler -------- - [Rustc now respects the `-C codegen-units` flag in incremental mode.][70156] Additionally when in incremental mode rustc defaults to 256 codegen units. - [Refactored `catch_unwind`, to have zero-cost unless unwinding is enabled and a panic is thrown.][67502] - [Added tier 3\* support for the `aarch64-unknown-none` and `aarch64-unknown-none-softfloat` targets.][68334] - [Added tier 3 support for `arm64-apple-tvos` and `x86_64-apple-tvos` targets.][68191] Libraries --------- - [Special cased `vec![]` to map directly to `Vec::new()`.][70632] This allows `vec![]` to be able to be used in `const` contexts. - [`convert::Infallible` now implements `Hash`.][70281] - [`OsString` now implements `DerefMut` and `IndexMut` returning a `&mut OsStr`.][70048] - [Unicode 13 is now supported.][69929] - [`String` now implements `From<&mut str>`.][69661] - [`IoSlice` now implements `Copy`.][69403] - [`Vec<T>` now implements `From<[T; N]>`.][68692] Where `N` is less than 32. - [`proc_macro::LexError` now implements `fmt::Display` and `Error`.][68899] - [`from_le_bytes`, `to_le_bytes`, `from_be_bytes`, `to_be_bytes`, `from_ne_bytes`, and `to_ne_bytes` methods are now `const` for all integer types.][69373] Stabilized APIs --------------- - [`PathBuf::with_capacity`] - [`PathBuf::capacity`] - [`PathBuf::clear`] - [`PathBuf::reserve`] - [`PathBuf::reserve_exact`] - [`PathBuf::shrink_to_fit`] - [`f32::to_int_unchecked`] - [`f64::to_int_unchecked`] - [`Layout::align_to`] - [`Layout::pad_to_align`] - [`Layout::array`] - [`Layout::extend`] Cargo ----- - [Added the `cargo tree` command which will print a tree graph of your dependencies.][cargo/8062] E.g. ``` mdbook v0.3.2 (/Users/src/rust/mdbook) +-- ammonia v3.0.0 | +-- html5ever v0.24.0 | | +-- log v0.4.8 | | | +-- cfg-if v0.1.9 | | +-- mac v0.1.1 | | +-- markup5ever v0.9.0 | | +-- log v0.4.8 (*) | | +-- phf v0.7.24 | | | +-- phf_shared v0.7.24 | | | +-- siphasher v0.2.3 | | | +-- unicase v1.4.2 | | | [build-dependencies] | | | +-- version_check v0.1.5 ... ``` You can also display dependencies on multiple versions of the same crate with `cargo tree -d` (short for `cargo tree --duplicates`). Misc ---- - [Rustdoc now allows you to specify `--crate-version` to have rustdoc include the version in the sidebar.][69494] Compatibility Notes ------------------- - [Rustc now correctly generates static libraries on Windows GNU targets with the `.a` extension, rather than the previous `.lib`.][70937] - [Removed the `-C no_integrated_as` flag from rustc.][70345] - [The `file_name` property in JSON output of macro errors now points the actual source file rather than the previous format of `<NAME macros>`.][70969] **Note:** this may not point a file that actually exists on the user's system. - [The minimum required external LLVM version has been bumped to LLVM 8.][71147] - [`mem::{zeroed, uninitialised}` will now panic when used with types that do not allow zero initialization such as `NonZeroU8`.][66059] This was previously a warning. - [In 1.45.0 (the next release) converting a `f64` to `u32` using the `as` operator has been defined as a saturating operation.][71269] This was previously undefined behaviour, you can use the `{f64, f32}::to_int_unchecked` methods to continue using the current behaviour which may desirable in rare performance sensitive situations. Internal Only ------------- These changes provide no direct user facing benefits, but represent significant improvements to the internals and overall performance of rustc and related tools. - [dep_graph Avoid allocating a set on when the number reads are small.][69778] - [Replace big JS dict with JSON parsing.][71250] [69373]: rust-lang/rust#69373 [66059]: rust-lang/rust#66059 [68191]: rust-lang/rust#68191 [68899]: rust-lang/rust#68899 [71147]: rust-lang/rust#71147 [71250]: rust-lang/rust#71250 [70937]: rust-lang/rust#70937 [70969]: rust-lang/rust#70969 [70632]: rust-lang/rust#70632 [70281]: rust-lang/rust#70281 [70345]: rust-lang/rust#70345 [70048]: rust-lang/rust#70048 [70081]: rust-lang/rust#70081 [70156]: rust-lang/rust#70156 [71269]: rust-lang/rust#71269 [69838]: rust-lang/rust#69838 [69929]: rust-lang/rust#69929 [69661]: rust-lang/rust#69661 [69778]: rust-lang/rust#69778 [69494]: rust-lang/rust#69494 [69403]: rust-lang/rust#69403 [69033]: rust-lang/rust#69033 [68692]: rust-lang/rust#68692 [68334]: rust-lang/rust#68334 [67502]: rust-lang/rust#67502 [cargo/8062]: rust-lang/cargo#8062 [`PathBuf::with_capacity`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.with_capacity [`PathBuf::capacity`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.capacity [`PathBuf::clear`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.clear [`PathBuf::reserve`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.reserve [`PathBuf::reserve_exact`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.reserve_exact [`PathBuf::shrink_to_fit`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.shrink_to_fit [`f32::to_int_unchecked`]: https://doc.rust-lang.org/std/primitive.f32.html#method.to_int_unchecked [`f64::to_int_unchecked`]: https://doc.rust-lang.org/std/primitive.f64.html#method.to_int_unchecked [`Layout::align_to`]: https://doc.rust-lang.org/std/alloc/struct.Layout.html#method.align_to [`Layout::pad_to_align`]: https://doc.rust-lang.org/std/alloc/struct.Layout.html#method.pad_to_align [`Layout::array`]: https://doc.rust-lang.org/std/alloc/struct.Layout.html#method.array [`Layout::extend`]: https://doc.rust-lang.org/std/alloc/struct.Layout.html#method.extend
Version 1.44.0 (2020-06-04) ========================== Language -------- - [You can now use `async/.await` with `#[no_std]` enabled.][69033] - [Added the `unused_braces` lint.][70081] **Syntax-only changes** - [Expansion-driven outline module parsing][69838] ```rust #[cfg(FALSE)] mod foo { mod bar { mod baz; // `foo/bar/baz.rs` doesn't exist, but no error! } } ``` These are still rejected semantically, so you will likely receive an error but these changes can be seen and parsed by macros and conditional compilation. Compiler -------- - [Rustc now respects the `-C codegen-units` flag in incremental mode.][70156] Additionally when in incremental mode rustc defaults to 256 codegen units. - [Refactored `catch_unwind` to have zero-cost, unless unwinding is enabled and a panic is thrown.][67502] - [Added tier 3\* support for the `aarch64-unknown-none` and `aarch64-unknown-none-softfloat` targets.][68334] - [Added tier 3 support for `arm64-apple-tvos` and `x86_64-apple-tvos` targets.][68191] Libraries --------- - [Special cased `vec![]` to map directly to `Vec::new()`.][70632] This allows `vec![]` to be able to be used in `const` contexts. - [`convert::Infallible` now implements `Hash`.][70281] - [`OsString` now implements `DerefMut` and `IndexMut` returning a `&mut OsStr`.][70048] - [Unicode 13 is now supported.][69929] - [`String` now implements `From<&mut str>`.][69661] - [`IoSlice` now implements `Copy`.][69403] - [`Vec<T>` now implements `From<[T; N]>`.][68692] Where `N` is at most 32. - [`proc_macro::LexError` now implements `fmt::Display` and `Error`.][68899] - [`from_le_bytes`, `to_le_bytes`, `from_be_bytes`, `to_be_bytes`, `from_ne_bytes`, and `to_ne_bytes` methods are now `const` for all integer types.][69373] Stabilized APIs --------------- - [`PathBuf::with_capacity`] - [`PathBuf::capacity`] - [`PathBuf::clear`] - [`PathBuf::reserve`] - [`PathBuf::reserve_exact`] - [`PathBuf::shrink_to_fit`] - [`f32::to_int_unchecked`] - [`f64::to_int_unchecked`] - [`Layout::align_to`] - [`Layout::pad_to_align`] - [`Layout::array`] - [`Layout::extend`] Cargo ----- - [Added the `cargo tree` command which will print a tree graph of your dependencies.][cargo/8062] E.g. ``` mdbook v0.3.2 (/Users/src/rust/mdbook) ├── ammonia v3.0.0 │ ├── html5ever v0.24.0 │ │ ├── log v0.4.8 │ │ │ └── cfg-if v0.1.9 │ │ ├── mac v0.1.1 │ │ └── markup5ever v0.9.0 │ │ ├── log v0.4.8 (*) │ │ ├── phf v0.7.24 │ │ │ └── phf_shared v0.7.24 │ │ │ ├── siphasher v0.2.3 │ │ │ └── unicase v1.4.2 │ │ │ [build-dependencies] │ │ │ └── version_check v0.1.5 ... ``` You can also display dependencies on multiple versions of the same crate with `cargo tree -d` (short for `cargo tree --duplicates`). Misc ---- - [Rustdoc now allows you to specify `--crate-version` to have rustdoc include the version in the sidebar.][69494] Compatibility Notes ------------------- - [Rustc now correctly generates static libraries on Windows GNU targets with the `.a` extension, rather than the previous `.lib`.][70937] - [Removed the `-C no_integrated_as` flag from rustc.][70345] - [The `file_name` property in JSON output of macro errors now points the actual source file rather than the previous format of `<NAME macros>`.][70969] **Note:** this may not point to a file that actually exists on the user's system. - [The minimum required external LLVM version has been bumped to LLVM 8.][71147] - [`mem::{zeroed, uninitialised}` will now panic when used with types that do not allow zero initialization such as `NonZeroU8`.][66059] This was previously a warning. - [In 1.45.0 (the next release) converting a `f64` to `u32` using the `as` operator has been defined as a saturating operation.][71269] This was previously undefined behaviour, but you can use the `{f64, f32}::to_int_unchecked` methods to continue using the current behaviour, which may be desirable in rare performance sensitive situations. Internal Only ------------- These changes provide no direct user facing benefits, but represent significant improvements to the internals and overall performance of rustc and related tools. - [dep_graph Avoid allocating a set on when the number reads are small.][69778] - [Replace big JS dict with JSON parsing.][71250] [69373]: rust-lang/rust#69373 [66059]: rust-lang/rust#66059 [68191]: rust-lang/rust#68191 [68899]: rust-lang/rust#68899 [71147]: rust-lang/rust#71147 [71250]: rust-lang/rust#71250 [70937]: rust-lang/rust#70937 [70969]: rust-lang/rust#70969 [70632]: rust-lang/rust#70632 [70281]: rust-lang/rust#70281 [70345]: rust-lang/rust#70345 [70048]: rust-lang/rust#70048 [70081]: rust-lang/rust#70081 [70156]: rust-lang/rust#70156 [71269]: rust-lang/rust#71269 [69838]: rust-lang/rust#69838 [69929]: rust-lang/rust#69929 [69661]: rust-lang/rust#69661 [69778]: rust-lang/rust#69778 [69494]: rust-lang/rust#69494 [69403]: rust-lang/rust#69403 [69033]: rust-lang/rust#69033 [68692]: rust-lang/rust#68692 [68334]: rust-lang/rust#68334 [67502]: rust-lang/rust#67502 [cargo/8062]: rust-lang/cargo#8062 [`PathBuf::with_capacity`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.with_capacity [`PathBuf::capacity`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.capacity [`PathBuf::clear`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.clear [`PathBuf::reserve`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.reserve [`PathBuf::reserve_exact`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.reserve_exact [`PathBuf::shrink_to_fit`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.shrink_to_fit [`f32::to_int_unchecked`]: https://doc.rust-lang.org/std/primitive.f32.html#method.to_int_unchecked [`f64::to_int_unchecked`]: https://doc.rust-lang.org/std/primitive.f64.html#method.to_int_unchecked [`Layout::align_to`]: https://doc.rust-lang.org/std/alloc/struct.Layout.html#method.align_to [`Layout::pad_to_align`]: https://doc.rust-lang.org/std/alloc/struct.Layout.html#method.pad_to_align [`Layout::array`]: https://doc.rust-lang.org/std/alloc/struct.Layout.html#method.array [`Layout::extend`]: https://doc.rust-lang.org/std/alloc/struct.Layout.html#method.extend
Pkgsrc changes: * Remove the clutter caused by the cross-compile setup from Makefile (Now consigned to my own private cross.mk file.) * Remove a couple of patches which are now integrated upstream. * Minor adjustments to a couple of other patches. * Adjust cargo checksums after upstream upgrades. * Belatedly bump the curl dependency * If doing a "dist" build, unset DESTDIR during the build phase, to work around a mysterious build bug deep in the bowels of llvm, causing llvm tools to be installed to a directory unexpecetd by the rest of the rust build, ref. rust-lang/rust#73132 A "dist" build is not expected to be followed by an "install". * Bump nearly all bootstraps to 1.43.1; NetBSD earmv7hf bootstrap bumped to 1.44.0, as that one now finally builds and works. Upstream changes: Version 1.44.0 (2020-06-04) ========================== Language -------- - [You can now use `async/.await` with `#[no_std]` enabled.][69033] - [Added the `unused_braces` lint.][70081] **Syntax-only changes** - [Expansion-driven outline module parsing][69838] ```rust #[cfg(FALSE)] mod foo { mod bar { mod baz; // `foo/bar/baz.rs` doesn't exist, but no error! } } ``` These are still rejected semantically, so you will likely receive an error but these changes can be seen and parsed by macros and conditional compilation. Compiler -------- - [Rustc now respects the `-C codegen-units` flag in incremental mode.][70156] Additionally when in incremental mode rustc defaults to 256 codegen units. - [Refactored `catch_unwind`, to have zero-cost unless unwinding is enabled and a panic is thrown.][67502] - [Added tier 3\* support for the `aarch64-unknown-none` and `aarch64-unknown-none-softfloat` targets.][68334] - [Added tier 3 support for `arm64-apple-tvos` and `x86_64-apple-tvos` targets.][68191] Libraries --------- - [Special cased `vec![]` to map directly to `Vec::new()`.][70632] This allows `vec![]` to be able to be used in `const` contexts. - [`convert::Infallible` now implements `Hash`.][70281] - [`OsString` now implements `DerefMut` and `IndexMut` returning a `&mut OsStr`.][70048] - [Unicode 13 is now supported.][69929] - [`String` now implements `From<&mut str>`.][69661] - [`IoSlice` now implements `Copy`.][69403] - [`Vec<T>` now implements `From<[T; N]>`.][68692] Where `N` is less than 32. - [`proc_macro::LexError` now implements `fmt::Display` and `Error`.][68899] - [`from_le_bytes`, `to_le_bytes`, `from_be_bytes`, `to_be_bytes`, `from_ne_bytes`, and `to_ne_bytes` methods are now `const` for all integer types.][69373] Stabilized APIs --------------- - [`PathBuf::with_capacity`] - [`PathBuf::capacity`] - [`PathBuf::clear`] - [`PathBuf::reserve`] - [`PathBuf::reserve_exact`] - [`PathBuf::shrink_to_fit`] - [`f32::to_int_unchecked`] - [`f64::to_int_unchecked`] - [`Layout::align_to`] - [`Layout::pad_to_align`] - [`Layout::array`] - [`Layout::extend`] Cargo ----- - [Added the `cargo tree` command which will print a tree graph of your dependencies.][cargo/8062] E.g. ``` mdbook v0.3.2 (/Users/src/rust/mdbook) +-- ammonia v3.0.0 | +-- html5ever v0.24.0 | | +-- log v0.4.8 | | | +-- cfg-if v0.1.9 | | +-- mac v0.1.1 | | +-- markup5ever v0.9.0 | | +-- log v0.4.8 (*) | | +-- phf v0.7.24 | | | +-- phf_shared v0.7.24 | | | +-- siphasher v0.2.3 | | | +-- unicase v1.4.2 | | | [build-dependencies] | | | +-- version_check v0.1.5 ... ``` You can also display dependencies on multiple versions of the same crate with `cargo tree -d` (short for `cargo tree --duplicates`). Misc ---- - [Rustdoc now allows you to specify `--crate-version` to have rustdoc include the version in the sidebar.][69494] Compatibility Notes ------------------- - [Rustc now correctly generates static libraries on Windows GNU targets with the `.a` extension, rather than the previous `.lib`.][70937] - [Removed the `-C no_integrated_as` flag from rustc.][70345] - [The `file_name` property in JSON output of macro errors now points the actual source file rather than the previous format of `<NAME macros>`.][70969] **Note:** this may not point a file that actually exists on the user's system. - [The minimum required external LLVM version has been bumped to LLVM 8.][71147] - [`mem::{zeroed, uninitialised}` will now panic when used with types that do not allow zero initialization such as `NonZeroU8`.][66059] This was previously a warning. - [In 1.45.0 (the next release) converting a `f64` to `u32` using the `as` operator has been defined as a saturating operation.][71269] This was previously undefined behaviour, you can use the `{f64, f32}::to_int_unchecked` methods to continue using the current behaviour which may desirable in rare performance sensitive situations. Internal Only ------------- These changes provide no direct user facing benefits, but represent significant improvements to the internals and overall performance of rustc and related tools. - [dep_graph Avoid allocating a set on when the number reads are small.][69778] - [Replace big JS dict with JSON parsing.][71250] [69373]: rust-lang/rust#69373 [66059]: rust-lang/rust#66059 [68191]: rust-lang/rust#68191 [68899]: rust-lang/rust#68899 [71147]: rust-lang/rust#71147 [71250]: rust-lang/rust#71250 [70937]: rust-lang/rust#70937 [70969]: rust-lang/rust#70969 [70632]: rust-lang/rust#70632 [70281]: rust-lang/rust#70281 [70345]: rust-lang/rust#70345 [70048]: rust-lang/rust#70048 [70081]: rust-lang/rust#70081 [70156]: rust-lang/rust#70156 [71269]: rust-lang/rust#71269 [69838]: rust-lang/rust#69838 [69929]: rust-lang/rust#69929 [69661]: rust-lang/rust#69661 [69778]: rust-lang/rust#69778 [69494]: rust-lang/rust#69494 [69403]: rust-lang/rust#69403 [69033]: rust-lang/rust#69033 [68692]: rust-lang/rust#68692 [68334]: rust-lang/rust#68334 [67502]: rust-lang/rust#67502 [cargo/8062]: rust-lang/cargo#8062 [`PathBuf::with_capacity`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.with_capacity [`PathBuf::capacity`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.capacity [`PathBuf::clear`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.clear [`PathBuf::reserve`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.reserve [`PathBuf::reserve_exact`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.reserve_exact [`PathBuf::shrink_to_fit`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.shrink_to_fit [`f32::to_int_unchecked`]: https://doc.rust-lang.org/std/primitive.f32.html#method.to_int_unchecked [`f64::to_int_unchecked`]: https://doc.rust-lang.org/std/primitive.f64.html#method.to_int_unchecked [`Layout::align_to`]: https://doc.rust-lang.org/std/alloc/struct.Layout.html#method.align_to [`Layout::pad_to_align`]: https://doc.rust-lang.org/std/alloc/struct.Layout.html#method.pad_to_align [`Layout::array`]: https://doc.rust-lang.org/std/alloc/struct.Layout.html#method.array [`Layout::extend`]: https://doc.rust-lang.org/std/alloc/struct.Layout.html#method.extend
This change is pulled out of #69937 per @dtolnay
This implements
DerefMut for OsString
to allow obtaining a&mut OsStr
. This also implementsIndexMut for OsString
, which is used byDerefMut
. This pattern is the same as is used byDeref
.This is necessary to for methods like
make_ascii_lowercase
which need to mutate the underlying value.